


cobegin {
    process 顾客 i {
        P(empty);  // 顾客等待空的座位
        P(mutex);  // 保证只有一个顾客取号
        从取号机获取一个号码;
        V(mutex);
        V(full);   // 通知营业员，有顾客请求了
        等待叫号;
        P(service);  // 如果还没叫号，则阻塞等待被叫号
        获取服务;
    }

    process 营业员 {
        while (TRUE) {
            P(full);   // 没有顾客请求，则等待
            叫号;
            V(service); // 唤醒一个正在等待被叫号的顾客
            V(empty);  // 一个顾客被叫号了，通知其他顾客，有空座位了
            为客户服务;
        }
    }
} coend

